package utils;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.psi.*;

import java.util.HashMap;
import java.util.Map;

public class ParseEntryUtils {
    /**
     * 解析实体
     *
     * @param event
     * @return object[0] 实体类对应的PsiClass ,objects[1] 对应实体的包名 ，object[2] 对应实体的成员变量的map集合
     */
    public static Object[] parseEntry(AnActionEvent event) {
        Object[] objects = new Object[3];
        /*
           key 为属性变量的名称  value 为属性变量的类型
         */
        Map<String, String> map = new HashMap<>();
        PsiFile file = event.getData(PlatformDataKeys.PSI_FILE);
        for (PsiElement psiElement : file.getChildren()) {
            if (psiElement instanceof PsiClass) {
                // 获取到当前正在编辑的类
                PsiClass clazz = (PsiClass) psiElement;
                objects[0] = clazz;
                // 获取类的所有成员变量,这种获取方式有点类似于java的反射。
                PsiField[] allFields = clazz.getAllFields();
                for (PsiField p : allFields) {
                    // 成员变量的类型
                    String type = p.getType().getPresentableText();
                    // 成员变量的名称
                    String name = p.getName();
                    map.put(name, type);
                }
            } else if (psiElement instanceof PsiPackageStatement) {
                // 获取到当前正在编辑的类的包信息
                PsiPackageStatement packageStatement = (PsiPackageStatement) psiElement;
                String packageName = packageStatement.getPackageName();
                objects[1] = packageName;
            }
        }
        objects[2] = map;
        return objects;
    }
}
